/**
 * Created by liekkas on 2018/07/27.
 * 验证器
 */
//验证手机号码
const vaildateRequire = (rule, value, callback) => {
    if((Array.isArray(value) ? !value.length : !value)){
        callback(new Error('该项为必填项'));
    }else{
        callback();
    }

};

//验证手机号码
const vaildatePhone = (rule, phone, callback) => {
    if(typeof phone=="undefined"||phone==""||phone==null){
        callback();
    }
    var telRegex = /^1[34578]\d{9}$/;
    if(!telRegex.test(phone)){
        callback(new Error('手机号码格式不正确'));
    }else{
        callback();
    }

};
/**
 * 验证邮箱
 * @param rule
 * @param email
 * @param callback
 */
const vaildateEmail=(rule, email, callback) => {
    if(typeof email=="undefined"||email==""){
        callback();
    }
    var emailRegex = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
    if(!emailRegex.test(email)){
        callback(new Error('邮箱格式不正确'));
    }else{
        callback();
    }
};

/**
 * 验证只能是数字
 */
const vaildateOnlyNumber=(rule, text, callback) => {
    if(typeof text=="undefined"||text==""){
        callback();
    }
    var regPos = /^\d+(\.\d+)?$/; //非负浮点数
    var regNeg = /^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/; //负浮点数
    if(!(regPos.test(text) || regNeg.test(text))){
        callback(new Error('只允许数字'));
    }else{
        callback();
    }
}

/**
 * 验证身份证
 */
const vaildateIDCard=(rule, text, callback) => {
    if(typeof text=="undefined"||text==""){
        callback();
    }
    var IDCardRegex = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
    if(!IDCardRegex.test(text)){
        callback(new Error('身份证格式不正确'));
    }else{
        callback();
    }
}

/**
 * 验证日期
 */
const vaildateDate=(rule, date, callback) => {
    var dateRegex =/^\d{4}(\-)\d{1,2}\1\d{1,2}$/;
    if(!dateRegex.test(date)){
        callback(new Error('日期格式（yyyy-mm-dd）不正确'));
    }else{
        callback();
    }
};
/**
 * 验证正整数
 * @param rule
 * @param text
 * @param callback
 */
const validatePositiveInt=(rule, text, callback) => {
    if(typeof text=="undefined"||text==""){
        callback();
    }
    var positiveRegex = /^\d+$/;
    if(!positiveRegex.test(text)){
        callback(new Error('只允许为正整数'));
    }else{
        callback();
    }
}
/**
 * 验证是否json格式
 */
const validateJsonFormat=(rule, str, callback) => {
    if(typeof str=="undefined"||str==""||str==null){
        callback();
    }
    if (typeof str == 'string') {
        try {
            var obj=JSON.parse(str);
            if(typeof obj == 'object' && obj ){
                callback();
            }else{
                callback(new Error('json格式不正确'));
            }
        } catch(e) {
            callback(new Error('json格式不正确'));
        }
    }
}

/**
 * 验证是否含有中文字符
 */
const validateContainChinese=(rule, str, callback) => {
    if(typeof str=="undefined"||str==""||str==null){
        callback();
    }
    var regex = /^[\u4e00-\u9fa5]+$/;
    if(regex.test(str)){
        callback(new Error('请输入非中文字符'));
    }else{
        callback();
    }
}


export default {
    "require":vaildateRequire,
    "phone":vaildatePhone,
    "email":vaildateEmail,
    "number":vaildateOnlyNumber,
    "idcard":vaildateIDCard,
    "date":vaildateDate,
    "positive":validatePositiveInt,
    "json":validateJsonFormat,
    "word":validateContainChinese,
}

